package lc.q3000_q4000;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/**
 * 给你一个正整数 days，表示员工可工作的总天数（从第 1 天开始）。另给你一个二维数组 meetings，长度为 n，其中 meetings[i] = [start_i, end_i] 表示第 i 次会议的开始和结束天数（包含首尾）。
 *
 * 返回员工可工作且没有安排会议的天数。
 *
 * 注意：会议时间可能会有重叠。
 */
public class Q3169 {

    public int countDays(int days, int[][] meetings) {
        // 直接给一个boolean数组
        // 排序,双重排序
        Arrays.sort(meetings, Comparator.comparing(k -> k[0]));
        // 然后合并区间
        int[] last = meetings[0];
        int res = days;
        // 优化，last作用不大，在add的时候替换成计算即可
        for (int i = 1; i < meetings.length; i++) {
            int lastStart = last[0];
            int lastEnd = last[1];
            int start = meetings[i][0];
            int end = meetings[i][1];
            if (start > lastEnd) {
                // 则直接last写到list
                res -= (lastEnd - lastStart + 1);
                last = meetings[i];
            } else {
                last[1] = Integer.max(lastEnd, end);
            }
        }
        res -= (last[1] - last[0] + 1);
        return res;

    }
    public static void main(String[] args) {
        Q3169 obj = new Q3169();
        System.out.println(obj.countDays(10, new int[][]{
                {5,7},
                {1,3},
                {9,10}
        }));
    }
}
